/***************************************************************************
创建者：华磊
开始时间：               : 2020.12
copyright            : (C) 深圳市华友高科有限公司
修改说明：（每次有修改就添加一条，带有 修改人，修改时间，修改描述）

修改人:华磊
开始时间:2016
修改描述:工程整合 策略修改

2017.02.13
补充注册状态判断 控制页面

 ***************************************************************************
 *   示教器主程序
 *                                                                         *
 ***************************************************************************/
#ifndef MIDDLEVIEWDELEGATE_H
#define MIDDLEVIEWDELEGATE_H

#include "middleviewdelegate_global.h"

#include "../RunView/runview.h"
#include "../JogView/jogview.h"
#include "../programView/programview.h"
#include "../systemstatus/systemstatus.h"
#include "../messageView/messageview.h"

#include "../programFileView/programfileview.h"
#include "../HomeMenuView/homemenuview.h"

#include "../bottomview/bottomview.h"

#include "../CommunicateDelegate/moveoperation.h"

#include <QTimer>
#include <QStackedWidget>
class WeldToolView;



class MIDDLEVIEWDELEGATESHARED_EXPORT MiddleViewDelegate : public QObject
{
    Q_OBJECT
public:
    MiddleViewDelegate(GlobalData *globalDateIn,
                            GlobalData *ioDataIn,
                            MoveOperation *moveOperationIn,
                            RunView *runViewIn,
                            JogView *jogViewIn,
                            ProgramView *programViewIn,
                            SystemStatus *ioStatusViewIn,
                            MessageView *messageViewIn,
                            ProgramFileView *programFileViewIn,
                            HomeMenuView *homeMenuViewIn,
                            BottomView *bottomViewIn , int styleIdIn, QWidget *mainWindowIn
                       ,CommunicateNormalDelegate *communicateNormalDelegateIn);
    ~MiddleViewDelegate();
public:
    /**
     * @brief hideAllView           隐藏所有页面
     */
    void hideAllView();

signals:
    void setBuzzerPlay_signal();
    void saveProgramFile_signal();
    /**
     * @brief msgBoxSignal                  通知 打开消息框
     */
    void msgBoxSignal(int type,QString title,QString text);
    void closeMsgBoxSignal();

    /**
     * @brief changeBottomStatusSignal  更新 底部 程序状态
     */
    void updateBottomStatus(int currentStatus);
    /**
     * @brief updateRunningView     提示更新 运程界面
     */
    void updateRunningView();
    /**
     * @brief updateJogView         提示更新 寸动界面
     */
    void updateJogView();
    /**
     * @brief updateProView         提示更新 程序编辑界面
     */
    void updateProView();
    /**
     * @brief updateIoView          提示更新 IO界面
     */
    void updateIoView();
    /**
     * @brief updateMsgView         提示更新 消息界面
     */
    void updateMsgView();
    /**
     * @brief showRegisterDialogSignal  提示更新 显示注册界面(其他界面无法进入)
     */
    void showRegisterDialogSignal();
    /**
     * @brief changeLeftView        error消息 修改左侧界面
     */
    void changeLeftView(int number);

    /**
     * @brief useFilmSignal         调用背景膜
     */
    void useFilmSignal();
    void unUseFileSianal();

public slots:
    /**
     * @brief timeViewChangeSlot    定时刷新界面
     */
    void timeViewChangeSlot();

    /**
     * @brief setViewIDSlot         设置当前中央界面ID
     * @param id
     */
    void setViewIDSlot(int id);

    /**
     * @brief setViewIDFromReturnBtnSlot    判断当前ID后再设置中央ID
     * @param id
     */
    void setViewIDFromReturnBtnSlot();

    /**
     * @brief timeMsgErrorSound             error消息 滴滴滴响定时器
     */
    void timeMsgErrorSound();

    void changeLanguageSlot(int language);

private:
    void initialDisplayStyle(int styleId, QWidget *mainWindowIn);

private:
    GlobalData *globalDate;
    GlobalData *ioData;
    MoveOperation *moveOperation;
    RunView *runView;
    JogView *jogView;
    ProgramView *programView;
    SystemStatus *ioStatusView;
    MessageView *messageView;
    ProgramFileView *programFileView;
    HomeMenuView *homeMenuView;
    BottomView *bottomView;
    QWidget *craftToolView;
    QStackedWidget *craftToolView_staked;
    WeldToolView *weldToolView;

    QTranslator translator;
    QTimer *timeViewChange;

    EM_MID_VIEW_ID currentViewID;              //当前ID
    EM_MID_VIEW_ID lastViewID;           //前一状态页面(file 用)

    EM_MID_VIEW_ID runningBackViewID;

    /**
     * @brief timeCount             控制频率
     */
    int timeRunViewCount;

    int timeMsgViewCount;           //缓存 记录是否进入过消息界面
    int tmpMsgSize;                 //缓存 消息大小

    //int timeProFileTreeCount;       //挂载

    bool registerFlag;              //若剩余注册有效一周 提示用户一次

    int bottomStatus;               //底部状态缓存

    /**
     * @brief isSaveFlag            文件修改提示的判定
     */
//    bool isSaveFlag;

    /**
     * @brief ioDataFlag            控制ioData的频率
     */
    bool ioDataFlag;
    int tmpIoUpdateFlag;

    /**
     * @brief initCtrlFlag          控制 控制器情况
     */
    bool initCtrlFlag;
    CommunicateNormalDelegate *communicateNormalDelegate;

};

#endif // MIDDLEVIEWDELEGATE_H
